package me.firstapp.service.bbs;

import java.util.Date;
import java.util.Map;

import me.firstapp.common.utils.Page;
import me.firstapp.module.bbs.Member;

public interface MemberService {

	/**
	 * 通过用户名查询用户
	 * 
	 * @param name
	 * @param apiClientId
	 * @return
	 */
	Member findMemberByName(String name, Long apiClientId);

	/**
	 * 通过邮箱查询用户
	 * 
	 * @param email
	 * @param apiClientId
	 * @return
	 */
	Member findMemberByEmail(String email, Long apiClientId);

	/**
	 * 通过手机号查询用户
	 * 
	 * @param mobile
	 * @param apiClientId
	 * @return
	 */
	Member findMemberByMobile(String mobile, Long apiClientId);

	/**
	 * 通过id查询用户
	 * 
	 * @param id
	 * @param apiClientId
	 * @return
	 */
	Member findMemberById(Long id, Long apiClientId);

	/**
	 * 用户新增
	 * 
	 * @param name
	 *            昵称（必传）
	 * @param password
	 *            密码（必传）
	 * @param avatar
	 *            头像
	 * @param email
	 *            邮箱（必传）
	 * @param mobile
	 *            手机号
	 * @param signature
	 *            个性签名
	 * @param url
	 *            个人主页
	 */
	Member addMember(String name, String password, String avatar, String email, String mobile, String signature,
			String url, Long apiClientId);

	/**
	 * 用户登录
	 * 
	 * @param mobile
	 *            手机号
	 * @param email
	 *            邮箱
	 * @param name
	 *            昵称
	 * @param password
	 *            密码 （必传）
	 */
	Member executeLogin(String mobile, String email, String name, String password, Long apiClientId);

	/**
	 * 更新用户信息
	 * 
	 * @param avatar
	 * @param url
	 * @param signature
	 * @return
	 */
	Member updateMemberInfo(Long memberId, String avatar, String url, String signature, Integer status,
			Long apiClientId);

	/**
	 * 修改密码
	 * 
	 * @param memberId
	 * @param oldPassword
	 * @param newPassword
	 */
	Member updateMemberPassword(Long memberId, String oldPassword, String newPassword, Long apiClientId);

	/**
	 * 重置密码，通常用于忘记密码
	 * 
	 * @param email
	 * @param newPassword
	 * @param apiClientId
	 * @return
	 */
	Member executeResetPassword(String email, String newPassword, Long apiClientId);

	/**
	 * 分页查询用户
	 * 
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页容
	 * @param searchParams
	 *            搜索参数
	 * @param sortParam
	 *            排序字段
	 * @param sortType
	 *            排序类型 ASC,DESC
	 */
	Page<Member> findMemberPage(Integer pageNo, Integer pageSize, Map<String, Object> searchParams, String sortParam,
			String sortType, Date startTime, Date endTime, Long apiClientId);
}
